package ar.edu.utn.frba.disenio.aterrizar;

import java.util.ArrayList;
import com.lanchita.*;

public class Busqueda {
	
	public String claseAsiento;
	public String ubicacionAsiento;

	public ArrayList<Vuelo> buscarVuelos(AerolineaLanchita aerolinea, String origen, String destino, String fechaSalida, Usuario usuario){
		
		AdapterLanchita adapter = new AdapterLanchita(aerolinea);
		ArrayList<Vuelo> disponibles = adapter.buscarVuelos(origen, destino, fechaSalida);
		ArrayList<Vuelo> retVal = new ArrayList<Vuelo>();
		
		for(Vuelo unVuelo : disponibles){
			unVuelo.aplicarRecargo(adapter.recargoAerolinea, usuario.getRecargoUsuario());
			if((unVuelo.esSuperOferta(unVuelo) && usuario.isSuperOfertas()) || !unVuelo.esSuperOferta(unVuelo)){
				retVal.add(unVuelo);	
			}			
        }  
		
		return retVal;
    }
	
	public ArrayList<Vuelo> buscarVuelos(AerolineaLanchita aerolinea, String origen, String destino, String fechaSalida, String parametroExtra, Usuario usuario){
		
		ArrayList<Vuelo> disponibles = this.buscarVuelos(aerolinea,origen,fechaSalida,destino,usuario);
		ArrayList<Vuelo> retVal = new ArrayList<Vuelo>();
		
		if (parametroExtra.equals("Primera") || parametroExtra.equals("Ejecutivo") || parametroExtra.equals("Turista") ){
			
			this.setClaseAsiento(parametroExtra);
			
			for(Vuelo unVuelo : disponibles){
				if(unVuelo.clase.equals(claseAsiento)){
					retVal.add(unVuelo);
				}			
	        }  
		}
		
		if (parametroExtra.equals("Ventana") || parametroExtra.equals("Centro") || parametroExtra.equals("Pasillo") ){
			
			this.setUbicacionAsiento(parametroExtra);
			
			for(Vuelo unVuelo : disponibles){
				if(unVuelo.ubicacion.equals(ubicacionAsiento)){
					retVal.add(unVuelo);
				}			
	        }  
		}
		
		return retVal;
	}
		
	public ArrayList<Vuelo> buscarVuelos(AerolineaLanchita aerolinea, String origen, String destino, String fechaSalida, String claseDeAsiento, String ubicacionAsiento, Usuario usuario){
		
		this.setClaseAsiento(claseAsiento);
		this.setUbicacionAsiento(ubicacionAsiento);
		
		ArrayList<Vuelo> disponibles = this.buscarVuelos(aerolinea, origen,fechaSalida,destino,usuario);
		ArrayList<Vuelo> retVal = new ArrayList<Vuelo>();
		
		for(Vuelo unVuelo : disponibles){
			if(unVuelo.clase.equals(claseAsiento) && unVuelo.ubicacion.equals(ubicacionAsiento)){
				retVal.add(unVuelo);
			}
		}
			
		return retVal;
	}

	public Vuelo buscarVueloParticular(AerolineaLanchita aerolinea, String codigo, Usuario usuario){
		
		AdapterLanchita adapter = new AdapterLanchita(aerolinea);
		ArrayList<Vuelo> asientosTotales = adapter.asientosTotales();
		
		for(Vuelo unVuelo : asientosTotales){
			if(unVuelo.codigo.equals(codigo)){
				unVuelo.aplicarRecargo(adapter.recargoAerolinea, usuario.getRecargoUsuario());
				return unVuelo;				 
			}			
        }  
		throw new AsientoErroneoException();
    }
	
	public enum ClaseAsiento {
		PRIMERA,
		EJECUTIVO,
		TURISTA
	}
	
	public enum UbicacionAsiento {
		VENTANA,
		CENTRO,
		PASILLO
	}
	
	/////// GETTERS AND SETTERS /////////
	
	public String getClaseAsiento() {
		return claseAsiento;
	}
	public void setClaseAsiento(String claseAsiento) {
		switch (ClaseAsiento.valueOf(claseAsiento.toUpperCase())){
		case PRIMERA:
			this.claseAsiento = "P";
		case EJECUTIVO:
			this.claseAsiento = "E";
		case TURISTA:	
			this.claseAsiento = "T";	
		}
	}
	public String getUbicacionAsiento() {
		return ubicacionAsiento;
	}
	public void setUbicacionAsiento(String ubicacionAsiento) {
		switch (UbicacionAsiento.valueOf(ubicacionAsiento.toUpperCase())){
		case VENTANA:
			this.ubicacionAsiento = "V";
		case CENTRO:
			this.ubicacionAsiento = "C";
		case PASILLO:	
			this.ubicacionAsiento = "P";
		}
	}
	
	////////////////////////////////////
	
}